package com;

import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

public class Demo2 {
    public static void main(String[] args) {
        //1.8 新特性   lambda  函数式接口  stream        optional LocalDate(time)

        //用TreeSet存对象，按照年龄大小排序（用定制排序，不用自然排序）
        //1.自定义一个类
        //2.实现Conparetor接口
        //3.重写方法
        //4.创建这个类的实例对象
        //5.将这个对象传进TreeSet


        //匿名内部类
        Person p1 = new Person(20, "11");
        Person p2 = new Person(21, "11");
        Person p3 = new Person(19, "11");

        //按照年龄大小升序排列
        Set<Person> set3 = new TreeSet<>(new MyCompare());


        Set<Person> set = new TreeSet<>(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()-o2.getAge();
            }
        });

        //lambda 本质：   就是一个接口的实例对象！  简写形式
        Set<Person> set1 = new TreeSet<>((Person o1, Person o2)->{
            return o1.getAge()-o2.getAge();
        });

        //  () -> {}
        // ()参数列表
        //  ->   语法符号
        //  {}  方法体
        //前提：必须要有接口，接口中必须只有一个抽象方法（其他方法无所谓）
        //简写：
        //参数列表类型直接省略
        //只有一个参数，()省略
        //方法体只有一个语句，无论是否具有返回值，通通省略{} ,  ;  , return
        set.add(p1);
        set.add(p2);
        set.add(p3);
        System.out.println(set);

        //写起来很爽，阅读性极差
        hh(a->a*a);
    }

    public static void hh(DemoInter demoInter){
        demoInter.xx(5);
    }

    //函数式接口：只有一个抽象方法的接口
}
